package controle;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.model.ListDataModel;
import modelo.Aluno;
import modelo.AlunoTurma;
import service.AlunoService;
import util.FabricaDeObjetos;

/**
 *
 * @author Jorge
 */
public class AlunoMB extends BaseMB {

    private AlunoService alunoService;
    private List<Aluno> lista;
    private Aluno alunoCorrente;
    private ListDataModel listaDataModel;    
    private List<AlunoTurma> listaAlunoTurma;

    public AlunoMB() {
        try {
            alunoService = (AlunoService) FabricaDeObjetos.getObjetoUnico(AlunoService.class);
        } catch (Exception ex) {
            Logger.getLogger(AlunoMB.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public String exibirTodos() {
        lista = alunoService.getTodos();
        listaDataModel = new ListDataModel(lista);
        
        return "alunoExibirTodos";
    }

    //Método auxiliar
    private void getTurmas() {
        alunoCorrente = alunoService.getPorIdComListaAlunoTurmas(alunoCorrente.getId());

        listaDataModel = new ListDataModel(alunoCorrente.getListaAlunoTurma());
    }

    public String exibirDiscPelaExibirTodos() {
        alunoCorrente = (Aluno) listaDataModel.getRowData();
        getTurmas();
        
        return "alunoExibirTurmas";
    }

    public String exibirTurmasPelaBusca() {
        getTurmas();
        
        return "alunoExibirTurmas";
    }

    public String editar() {
        alunoCorrente = (Aluno) listaDataModel.getRowData();

        return "editarAluno";
    }

    public String editarPelaBusca() {
        return "editarAluno";
    }
    
    //Método auxiliar
    private String excluir() {
        alunoService.removerAluno(alunoCorrente);
        
        return "alunoExcluido";
    }
    
    public String excluirPelaExibirTodos() {
        alunoCorrente = (Aluno) listaDataModel.getRowData();
        
        return excluir();
    }
    
    public String excluirPelaBusca() {
        return excluir();
    }

    public String buscar() {
        alunoCorrente = new Aluno();

        return "buscarAluno";
    }
    
    public String buscaPorId() {
        alunoCorrente = alunoService.getPorId(alunoCorrente.getId());
        List listaAluno = new ArrayList();

        if (alunoCorrente != null) {
            listaAluno.add(alunoCorrente);
        }

        listaDataModel = new ListDataModel(listaAluno);

        return "alunoExibirTodos";
    }

    public String buscaPorNome() {
        lista = alunoService.getPorNome(alunoCorrente.getNome());
        listaDataModel = new ListDataModel(lista);

        return "alunoExibirTodos";
    }

    public String cadastrar() {
        alunoCorrente = new Aluno();

        return "cadastrarAluno";
    }

    public String salvar() {
        alunoService.inserir(alunoCorrente);

        return "alunoSalvar";
    }

    public String salvarEdicao() {
        alunoService.setAlteracao(alunoCorrente);
        
        return "alunoSalvarEdicao";
    }

    public String voltar() {
        alunoCorrente = new Aluno();

        return "voltar";
    }

    public String voltarBusca() {
        alunoCorrente = new Aluno();

        return "alunoVoltarBusca";
    }

    public String voltarExibirTodos() {
        alunoCorrente = new Aluno();

        return "alunoVoltarExibirTodos";
    }

    public AlunoService getAlunoService() {
        return alunoService;
    }

    public void setAlunoService(AlunoService alunoService) {
        this.alunoService = alunoService;
    }

    public List<Aluno> getLista() {
        return lista;
    }

    public void setLista(List<Aluno> lista) {
        this.lista = lista;
    }

    public Aluno getAlunoCorrente() {
        return alunoCorrente;
    }

    public void setAlunoCorrente(Aluno alunoCorrente) {
        this.alunoCorrente = alunoCorrente;
    }

    public ListDataModel getListaDataModel() {
        return listaDataModel;
    }

    public void setListaDataModel(ListDataModel listaDataModel) {
        this.listaDataModel = listaDataModel;
    }
    
    public List<AlunoTurma> getListaAlunoTurma() {
        return listaAlunoTurma;
    }

    public void setListaAlunoTurma(List<AlunoTurma> listaAlunoTurma) {
        this.listaAlunoTurma = listaAlunoTurma;
    }
}
